package com.itdachang.design.behavioral.memento;

import lombok.Data;
import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.Random;
import java.util.UUID;

/**
 * 游戏者:游戏发起人
 * 当前游戏信息
 *
 * @author gcq
 * @Create 2022-02-15
 */
@Data
public class LeiGame {
    /**
     * 金币
     */
    Integer coin;

    /**
     * 血量
     */
    Integer hp;

    /**
     * 蓝量
     */
    Integer mp;

    /**
     * 游戏等级
     */
    Integer level;

    // 以上是游戏内部状态

    /**
     * 游戏服务器
     */
    GameServer gameServer = new GameServer();

    /**
     * 保存游戏记录
     *
     * @throws Exception 拷贝对象属性出错
     */
    void saveGamRecord() throws Exception {
        System.out.println("正在保存当前记录");
        GameRecord gameRecord = new GameRecord();
        BeanUtils.copyProperties(gameRecord, this);
        gameServer.add(gameRecord);
    }

    /**
     * 玩游戏
     */
    void playGame() {
        Integer i = new Random().nextInt();
        System.out.println(".......(())......." + i);
        coin = i;
        hp = i;
        mp = i;
        level = i;

    }

    /**
     * 从备忘录中获取游戏历史存档
     *
     * @param id 游戏记录 Id
     * @return LeiGame 游戏发起人
     */
    LeiGame getFormMemento(Integer id) throws Exception {
        System.out.println("获取游戏历史存档...");
        return gameServer.getRecord(id);
    }

    /**
     * 退出游戏
     */
    void exitGame() throws Exception {
        System.out.println("退出游戏进行存档(-_-)");
        saveGamRecord();
    }
}